# _*_ coding: UTF-8 _*_
# @Time     : 2021/10/25 15:04
# @Author   : yangshuaishuai
# @Site     : http://www.hzdledu.cn/
# @File     : practice4.py
# @Software : PyCharm

# 2. 练习：将列表[45,23,2,5,3,2,6,45,43,21,66,2,3,2]进行从小到大排序，不能用sort()函数，
# 1.冒泡排序：通过对相邻的两个数比较大小，较大(较小)数和后一个数交换位置，实现列表的整体有序
print('----------------------------------------')
list1 = [45, 23, 2, 5, 3, 2, 6, 45, 43, 21, 66, 2, 3, 2]
for i in range(len(list1) - 1):  # 外层循环决定比较次数
    for j in range(len(list1) - i - 1):  # 内层循环决定每次比较哪些数
        if list1[j] > list1[j + 1]:  # 比较相邻两个数，前一个数较大就和后一个数交换位置，升序排列
            # temp = list1[j]
            # list1[j] = list1[j + 1]
            # list1[j + 1] = temp
            list1[j], list1[j + 1] = list1[j + 1], list1[j]  # python交换值
        print(f'第{i}:{j}次循环：{list1}')
    print('------------------------------------')
print(list1)

# 3、求 100-200以内同时能被7、8整除的数
print('------------------------------------')
list1 = []
for i in range(100, 201):
    if i % 7 == 0 and i % 8 == 0:
        list1.append(i)
print(list1)

# 4.找出一个列表中，只出现了一次的数字，并且保持原来的次序，例如[1,2,1,3,2,5]结果为[3,5]
print('------------------------------------')
list1 = [1, 2, 1, 3, 2, 5]
list2 = []
for i in list1:
    if list1.count(i) == 1:
        list2.append(i)
print(list2)

# 提升
# 5、求 0 -1 + 2 - 3 + 4 - 5 + 6 -7.... + 100
print('------------------------------------')
sum1 = 0
for i in range(101):
    if i % 2 == 0:
        sum1 += i
    else:
        sum1 -= i
print(sum1)

# 6.求100以内的素数：>1整数，只能被1和自己整除
print('------------------------------------')
prime = []
for i in range(2, 101):
    num = 0
    for j in range(1, i + 1):
        if i % j == 0:
            num += 1
    if num == 2:
        prime.append(i)
print(prime)

prime = []
for i in range(2, 101):
    isPrime = True
    for j in range(2, i):
        if i % j == 0:
            isPrime = False
            break
    if isPrime:
        prime.append(i)
print(prime)

# 7. 水仙花数：水仙花数是指一个 n 位数 ( n 大于等于 3 )，它的每个位上的数字的 n 次幂之和等于它本身。
# # （例如：1的3次方 + 5的三次方 + 3三次方 = 153）。根据这个要求，打印所有三位数的水仙花数
print('------------------------------------')
list1 = []
for i in range(100, 1000):
    a = i // 100
    b = (i - a * 100) // 10
    c = i % 10
    if a ** 3 + b ** 3 + c ** 3 == i:
        list1.append(i)
print(list1)

list1 = []
for i in range(100, 1000):
    i = str(i)
    a = int(i[0])
    b = int(i[1])
    c = int(i[2])
    if a ** 3 + b ** 3 + c ** 3 == int(i):
        list1.append(int(i))
print(list1)

list1 = []
for a in range(1, 10):
    for b in range(0, 10):
        for c in range(0, 10):
            if a ** 3 + b ** 3 + c ** 3 == a * 100 + b * 10 + c:
                list1.append(a * 100 + b * 10 + c)
print(list1)

# 8.一球从100米高度自由落下，每次落地后反跳回原高度的一半，再落下。
# 求它在 第10次落地时，共经过多少米？第10次反弹多高？
print('------------------------------------')
height = 100
sum1 = 100
for i in range(9):
    height = height / 2
    sum1 += height * 2
print(f'一共经过{sum1}米，第10次反弹{height / 2}米')

# 9. 随机产生20个100-200之间的正整数存放到列表中，
# 并求列表中的所有元素最大值、最小值、平均值，然后将各元素的与平均值的差组成一个列表
print('------------------------------------')
import random

# 产生随机数
list1 = []
for i in range(20):
    num = random.randint(100, 200)
    list1.append(num)
print(list1)

max1 = max(list1)
min1 = min(list1)
avg = sum(list1)/len(list1)

list2 = []
for i in list1:
    list2.append(i-avg)
print(f'最大值:{max1},最小值:{min1},平均值：{avg}')
print(list2)

# 1.获取字符串 '11:12:11> 001 enter chatroom, level2'中的用户id和等级

# 2.获取下面字符串中的所有用户id和等级
# '''11:12:11> 001 enter chatroom, level2
# 11:12:11> 22 enter chatroom, level3
# 11:12:11> 0004 enter chatroom, level105
# 11:12:11> 003 enter chatroom, level99
# '''

# 3.将字符串'abcd[0910efg&*(]hijkl[ada2r4545]mn03opq$st'中的非字母字符去掉
str1 = 'abcd[0910efg&*(]hijkl[ada2r4545]mn03opq$st'
str2 = ''
for i in str1:
    if i.isalpha():
        str2 += i
print(str2)

# 5.编写一个程序，要求用户输入一个字符串，将字符串中重复的字符串去除，如输入'abcaadef'，输出为'abcdef'
str1 = input('请输入一个字符串:')
set1 = set(str1)
str2 = ''.join(list(set1))
print(str2)

str3 = ''
for i in str1:
    if i not in str3:
        str3 += i
print(str3)

# 1.模拟手机通讯录，模拟手机通讯录的增删改查操作，联系人信息需要包括姓名和电话即可
contacts = {
    '张三': 13900000001,
    '李四': 13900000002
}

option = int(input('请输入通讯录操作（1-增加，2-删除，3-修改，4-查找）：'))
if option == 1:
    name = input('请输入新增联系人的名字：')
    phone = int(input(f'请输入{name}的电话'))
    contacts[name] = phone
elif option == 2:
    name = input('请输入删除联系人的名字：')
    if name not in contacts.keys():
        print(f'不存在联系人:{name}')
    else:
        contacts.pop(name)
elif option == 3:
    name = input('请输入修改联系人的名字：')
    if name not in contacts.keys():
        print(f'不存在联系人:{name}')
    else:
        phone = int(input(f'请输入{name}的电话'))
        contacts[name] = phone
elif option == 4:
    name = input('请输入修改联系人的名字：')
    if name not in contacts.keys():
        print(f'不存在联系人:{name}')
    else:
        print(f'{name}的电话：{contacts[name]}')
else:
    print(f'输入了错误的选项：{option}')

print(contacts)